1.saltstack安装
准备两台机器 192.168.0.84 192.168.0.83
设置hostname
192.168.0.84
|
|
192.168.0.83
|
|
配置hosts
192.168.0.84
|
|
192.168.0.83
|
|
关闭selinux,清空iptables规则
192.168.0.84:
|
|
192.168.0.83:
|
|
启动服务
192.168.0.84上:
编辑配置文件 /etc/salt/minion
|
|
大概16行修改或增加
|
|
启动服务
|
|
|
|
192.168.0.83上:
编辑配置文件 /etc/salt/minion
|
|
大概16行修改或增加
|
|
启动服务
|
|
配置认证
以下操作都是在192.168.0.84上:
现在要把 web10 加到 Accepted Keys
|
|
此时我们在client的 /etc/salt/pki/minion 目录下面会多出一个minion_master.pub 文件
可以使用 salt-key 命令查看到已经签名的客户端
salt-key 可以使用-A签名所有主机,也可以使用-d删除指定主机的key,-D删除所有主机。
远程执行命令
示例1: salt ‘‘ test.ping 这里的表示所以已经签名的客户端,也可以指定其中一个,比如web10.yanyi.com
示例2: salt ‘*’ cmd.run ‘df -h’
说明: 这里的必须是在master上已经被接受过的客户端,可以通过salt-key查到,通常是我们已经设定的id值。关于这部分内容,它支持通配、列表以及正则。 比如两台客户端 web10 web11, 那我们可以写成 salt ‘web’ salt ‘web1[01]’ salt -L ‘web10,web11’ salt -E ‘web(10|11) 等形式,使用列表,即多个机器用 逗号分隔,而且需要加-L,使用正则必须要带-E选项>。 它还支持grains,加-G选项, pillar 加-I选项,下面会介绍到。
2.saltstack grains
grains是在minion启动时收集到的一些信息,比如操作系统类型、网卡ip、内核版本、cpu架构等。
salt ‘web10.yanyi.com’ grains.ls 列出所有的grains项目名字
|
|
salt ‘web10.yanyi.com’ grains.items 列出所有grains项目以及值
|
|
grains的信息并不是动态的,并不会时时变更,它只是在minion启动时收集到的。
我们可以根据grains收集到的一些信息,做配置管理工作。
grains支持自定义信息。
自定义 grains
192.168.0.83上,编辑文件 /etc/salt/grains
|
|
添加:
|
|
重启minion服务
|
|
192.168.0.84上:
获取 grains:salt ‘*’ grains.item role env
|
|
可以借助grains的一些属性信息来执行
|
|
3.saltstack pillar
pillar和grains不一样,是在master上定义的,并且是针对minion定义的一些信息。像一些比较重要的数据(密码)可以存在pillar里,还可以定义变量等。
配置自定义pillar /etc/salt/master
|
|
找到如下配置:
去掉前面的警号
创建此目录
|
|
编辑 /srv/pillar/test.sls
|
|
内容如下
|
|
编辑 /srv/pillar/top.sls
|
|
内容如下
|
|
重启master
|
|
当更改完pillar配置文件后,我们可以通过刷新pillar配置来获取新的pillar状态:
salt ‘*’ saltutil.refresh_pillar
验证:salt ‘*’ pillar.item conf
pillar同样可以用来作为salt的匹配对象。比如 salt -I ‘conf:/etc/123.conf’ test.ping
4.配置管理安装 apache
192.168.0.84上,编辑配置文件 /etc/salt/master
|
|
搜索找到 file_roots
打开如下内容的注释:
创建 /stv/salt 目录
|
|
编辑 /srv/salt/top.sls
|
|
加入如下内容
|
|
意思是,在所有的客户端上执行 apache模块
重启 /etc/init.d/salt-master restart
|
|
编辑 /srv/salt/apache.sls
|
|
加入如下内容,这个就是apache模块的内容
这里如果只有一个服务,那么就可以写成 –name: httpd 不用再换一行了。
|
|
说明,apache-service是id的名字,自定义的。pkg.installed 为包安装函数,下面是要安装的包的名字。service.running也是一个函数,来保证指定的服务启动,enable表示开机启动。
执行: salt ‘web10.yanyi.com’ state.highstate
5.配置文件和目录管理
配置管理文件
创建配置文件
|
|
添加内容
|
|
说明:第一行的file_test为自定的名字,表示该配置段的名字,可以在别的配置段中引用它,source指定文件从哪里拷贝,这里的test相当于是/srv/salt/test
创建目录
|
|
更改 top.sls
|
|
服务端刷新
|
|
客户端查看
配置管理目录
编辑配置文件
|
|
添加内容
|
|
clean: True 加上它之后,源删除文件或目录,目标也会跟着删除,否则不会删除
参考 http://www.0550go.com/automation-deployment/saltstack/saltstack-file-recurse.html
编辑 top.sls
|
|
添加内容
服务端刷新
|
|
查看客户端
6.配置管理远程命令
编辑配置文件
|
|
添加内容
|
|
还可以加unless,和onlyif正好相反
编辑 top.sls
|
|
服务端刷新
|
|
查看客户端
重新修改配置文件
|
|
添加内容
|
|
服务端刷新
|
|
查看客户端
7.配置管理远程脚本
编辑配置文件
|
|
添加内容
|
|
编辑脚本文件
|
|
编辑内容
|
|
编辑 top.sls
|
|
服务端刷新
|
|
客户端查看
8.配置管理任务计划
编辑配置文件
|
|
添加内容
|
|
注意,*需要用单引号引起来。当然我们还可以使用file.managed模块来管理cron,因为系统的cron都是以配置文件的形式存在的。想要删除该cron,需要增加:
cron.absent:
- name: /bin/touch /tmp/111.txt
两者不能共存,要想删除一个cron,那之前的present就得去掉。
编辑 top.sls
|
|
服务端刷新
|
|
客户端查看
9.saltstack 几个常用的命令
cp.get_file 拷贝master上的文件到客户端
|
|
cp.get_dir 拷贝目录
|
|
会自动在客户端创建test目录,所以后面不要加test,如果写成 /tmp/yanyi/ 则会在/tmp/yanyi/目录下又创建test
salt-run manage.up 显示存活的minion
salt ‘*’ cmd.script salt://test/1.sh 命令行下执行master上的shell脚本